# -*- coding: utf-8 -*-
require 'rubygems'
require 'faster_csv'
namespace :competencias do
  desc ""
  task :set_descripciones => :environment do
    Descripcion.find(:all,:include=>:competencia_cargo).each do |descripcion|
      descripcion.competencia_id=descripcion.competencia_cargo.competencia_id
      descripcion.cargo_id=descripcion.competencia_cargo.cargo_id
      descripcion.save
    end
  end
end


namespace :load do
  desc "Carga las competencias en el sistema"
  task :competencias => :environment do
    [Competencia, CompetenciaCargo, Descripcion].map(&:delete_all)
    Dir.chdir("#{RAILS_ROOT}/doc/csv/competencias")
    Dir.glob("*.csv").each do |cargo_filename|
      
      filename     = "#{RAILS_ROOT}/doc/csv/competencias/#{cargo_filename}"

      cargo_id = nil
      unless cargo_filename == "general.csv"
        cargo_titulo = cargo_filename.gsub('.csv', '')
        cargo        = Cargo.find_or_create_by_nombre(cargo_titulo) 
        cargo.save if cargo.new_record?
        cargo_id     = cargo.id
      end

      FasterCSV.foreach(filename, :quote_char => '\'' , :col_sep => '|', :row_sep => :auto, :headers => true ) do |row|
        if row[1]
          if cargo_filename == "general.csv"
            competencia  = Competencia.find_by_titulo(row[1], :conditions => ["tipo = 'general'"])
          else
            competencia  = Competencia.find_by_titulo(row[1], :conditions => ["tipo = 'especifica'"])
          end
          
          unless competencia
            competencia  = Competencia.new(:titulo => row[1])
            if cargo_id.nil?
              competencia.tipo     = 'general'
              competencia.cargo_id = cargo_id
            else
              competencia.tipo     = 'especifica'
              competencia.cargo_id = cargo_id
            end
            competencia.save
          end

          # unless cargo_filename == "general.csv"
          competencia_cargo  = CompetenciaCargo.find(:first, :conditions => ['competencia_id = ? AND cargo_id = ?', competencia.id, cargo_id])
          unless competencia_cargo
            competencia_cargo = CompetenciaCargo.create(:competencia_id => competencia.id, :cargo_id => cargo_id)
          end
          # end
          
          if cargo_filename == "general.csv"
            competencia_cargo.descripciones << Descripcion.new(:texto => row[2], :peso => row[3])
          else            
            competencia_cargo.descripciones << Descripcion.new(:texto => row[2], :junior => row[3], :senior => row[4], :master => row[5])
          end 
          competencia_cargo.save
         
          # puts "Competencia: #{competencia.titulo}"
          puts "Error: #{competencia.errors.full_messages}" unless competencia.valid?
          
        end
      end
    end
    
  end
end

